﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AutomationTools.Procedimentos.Exceptions;

namespace AutomationTools.Procedimentos.Leitura
{
    /// <summary>
    /// Efetua um request na URI e obtém o texto do corpo.
    /// Recebe:     -
    /// Retorna:    string - Corpo da página lida
    /// </summary>
    public class Request : IProcedimento
    {
        string uri; 
        ParametrosRequest parametros; 
        EnumFormMethod method;
        bool utilizarContexto;
        /// <summary>
        /// Efetua um request na URI e obtém o texto do corpo.
        /// </summary>
        /// <param name="uri">URI da página a ser feito o request.</param>
        /// <param name="parametros">Parametros que serão passados para o request.</param>
        /// <param name="method">Método do form que será utilizado no request.</param>
        public Request(string uri, ParametrosRequest parametros, EnumFormMethod method)
            : this(uri, parametros, method, true)
        {

        }

        public Request(string uri, EnumFormMethod method)
            : this(uri, null, method, true)
        {

        }

        public Request(string uri, ParametrosRequest parametros, EnumFormMethod method, bool utilizarContexto)
            
        {
            this.uri = uri;
            this.parametros = parametros;
            this.method = method;
            this.utilizarContexto = utilizarContexto;
        }

        public object Executar(IContexto contexto)
        {
            Pagina p = null;
            dynamic d = (dynamic)contexto;
            if (utilizarContexto && contexto.HasMember("Pagina"))
            {
                p = d.Pagina;
                p.Uri = uri;
            }
            else if (!utilizarContexto)
            {
                p = new Pagina(uri);
            }
            else
            {
                p = d.Pagina = new Pagina(uri);
            }

            p.CharSet = Encoding.GetEncoding("ISO-8859-1");
            if(method == EnumFormMethod.POST)
                return p.EfetuarPost(parametros);
            else
                return p.EfetuarGet(parametros);
        }


        public void ValidarEntrada(IContexto contexto)
        {
            throw new NotImplementedException();            
        }

        public enum EnumFormMethod{
            GET,
            POST
        }
    }
}
